「Google AIY Voice Kit」でAlexaのプロトタイプを作ってみる
Echoの招待が来ていない同志に向けて贈る記事第二弾です。(前回はこちら)
Google AIY Voice Kit
Google AIY Voice Kitというキットが販売されていますね。もともとはRaspberry Pi向け雑誌であるMagPi issue 57の付録だったもので、Raspberry Piと組み合わせてGoogle Homeを自作してみようという趣旨のキットです。この号はたいへん好評だったようで、売り切れ&入手の問い合わせが殺到したそうです。そのため単体キットとして発売されることとなり、今年の秋から予約受付をしていました。実は英国のPimoroniというオンラインショップから予約&購入済みだったのですが、すっかりご報告が遅くなってしまいました。Google AIY Voice Kitを使ってGoogle Homeを試す方法については、詳細が公式ページや添付の資料にも解説されています(英文ですが)。専用のイメージファイルも提供されていますので、簡単に試せるようです。
今回は、Google AIY Voice Kitを使って、招待の来ないEchoの代わりにしてみようという趣旨のレポートです。今では国内でも、スイッチサイエンスさんや秋月電子さんなどで取り扱いが始まっていますので、入手も容易です。ぜひ試してみてください。
- 秋月電子 http://akizukidenshi.com/catalog/g/gK-12835/
- スイッチサイエンス https://www.switch-science.com/catalog/3550/
キットの中身と必要機材
キットはこんな箱で届きました。
中身はこんなガイドと、
パーツがこんな感じで納められています。
ケースはダンボールです。
中にRaspberry Piの本体を納めることができ、コンパクトに仕上がります。
メインの基板です。スピーカ&マイクの回路の他、なにやらServosとかDriversという文字が見えます。音声入出力以外にも使えるようです。
マイクは別の基板に付いています。左右に二つです。
キットの他に、下記の機材が必要になります。
- Raspberry Pi 3
- microSDカード(8G以上)
- HDMI接続のディスプレイ、USBキーボード、マウス
手順のアウトライン
手順のアウトラインは以下の通りです。
- SDカードにイメージを書き込む
- Google Voice Kitを組み立てる
- ドライバを組み込む
- 開発者ポータルで、クライアントID、クラアントキー、セキュリティポリシーを作成する
- サンプルアプリケーションを構築する
- サンプルアプリを実行してみる
- 自動実行スクリプトを作成する
RaspbianをダウンロードしmicroSDカードに書き込む
この手順は前回と同じですが、再掲します。使用するOSのバージョンですが、このガイドによると、カーネルが4.9以上である必要があるようです。最新のRaspbianを選べば問題ないようです。Raspbianの公式サイトから、最新版のイメージをダウンロードします。今回はデスクトップ環境が必要なので、全部入りのものを使用しました。ファイル名は、2017-11-29-raspbian-stretch.zip
でした。
Mac Book Proでは下記の手順でSDカードに直接書き込むことができます。ターミナルを開いて、zipファイルを展開、SDカードをアンマウントして、ddコマンドでイメージを書き込みます(十数分かかります)。書き込み終わったらFATボリューム(boot)が自動マウントされるので、sshが使えるようにsshという空ファイルを作成しておきます。
$ unzip 2017-11-29-raspbian-stretch.zip $ sudo diskutil unmountDisk disk2 $ sudo dd if=2017-11-29-raspbian-stretch.img of=/dev/disk2 bs=1m $ touch /Volumes/boot/ssh
ついでに、WiFi設定のためwpa_supplicant.conf
ファイルを/bootに用意しておくと、最初からWiFiがセットアップされた状態で起動できるようです。セットアップ済みRaspberry Piがすでにあるなど、wpa_supplicant.conf
ファイルをご用意できる場合にはお試しください。
AIY Voice Kitを組み立てる
キットを組み立てます。公式サイトに写真入りで丁寧に解説されていますので、詳しくはそちらもご参照ください。
ケースとなるダンボールを組み立てます。番号が書いてあるので順番に折り曲げていきます。
Raspberry Piにメイン基板を差し込みます。無精をしてネジは使用しませんでした。
ボタンを取り付け、コネクタを接続。スイッチや、スピーカ、Raspberry Piとメイン基板を所定の場所に納めつつ、ダンボールのスペーサーを入れていきます。ちょっとしたパズル状態ですが、最終的にはうまく納められるはずです。
二つの穴からそれぞれマイクが表から見えるように位置を合わせて基板をテープで止めます。
完成です。
ドライバをインストールする
ドライバをインストールする手順は、このガイドの手順にしたがって作業を進めます。 まずは、Raspbian stretchをインストール済みのSDカードを挿入し、起動します。コンソールまたはssh経由でログインしておきます。 gitをインストールしておきます。そして、githubからコードやスクリプトをダウンロードしておきます。
$ sudo apt-get install git $ git clone https://github.com/google/aiyprojects-raspbian.git AIY-projects-python
スクリプトを使って、依存するツールをインストールします。ここはしばらく時間がかかります。
$ cd AIY-projects-python $ scripts/install-deps.sh
成功したら、サービス、そしてドライバをインストールします。うまくいったら、一度リブートしておきます。
$ sudo scripts/install-services.sh $ sudo scripts/configure-driver.sh $ sudo reboot
再起動がうまくいったら、スクリプトでALSA用の設定を作成します。/etc/asound.conf
ファイルが作成されます。
$ sudo scripts/install-alsa-config.sh Renaming /etc/asound.conf to /etc/asound.conf.bak... Installed voiceHAT ALSA config at /etc/asound.conf
arecord
/aplay
を使って、サウンドデバイスの認識状況を確認しておきます。正常だとこんな感じになります。
$ arecord -l **** List of CAPTURE Hardware Devices **** card 0: sndrpigooglevoi [snd_rpi_googlevoicehat_soundcar], device 0: Google voiceHAT SoundCard HiFi voicehat-hifi-0 [] Subdevices: 0/1 Subdevice #0: subdevice #0 $ aplay -l **** List of PLAYBACK Hardware Devices **** card 0: sndrpigooglevoi [snd_rpi_googlevoicehat_soundcar], device 0: Google voiceHAT SoundCard HiFi voicehat-hifi-0 [] Subdevices: 1/1 Subdevice #0: subdevice #0
サウンドデバイスの入出力動作を確認してみます。下記のコマンドは2秒間録音を行い、ファイルに保存。そしてそれを再生する例です。
$ arecord -d 2 -r 16000 -f S16_LE > rec.raw $ aplay -r 16000 -f S16_LE rec.raw
~/.asoundrc
ファイルが存在しているとうまく動作しない場合があります。確認してみましょう。/etc/asound.conf
が作成されているのであれば、~/.asoundrc
は消してしまっても大丈夫でした。
$ rm ~/.asoundrc
以上でドライバのセットアップは完了です。
開発者ポータルで製品を登録する
Amazon開発者ポータルのアカウントを準備しておきます。ログイン後、Alexaを選んで、Alexa Voice Service の選択します。
「製品を作成する」ボタンをクリックし、必要事項を記入していきます。
- 製品名:AIYVoiceKit
- 製品ID: AIYVoiceKit
- 製品タイプ:端末
- コンパニオンアプリの使用:いいえ
- 商品カテゴリー:ワイヤレススピーカー
- 製品概要:Raspberry Pi Sample Project
- ハンズフリー
- 商品:いいえ
- 子供向け:いいえ
セキュリティプロファイルを新たに作成し、セキュリティプロファイルIDをメモしておきます。
クライアントIDと、クライアントシークレットが発行されますので、こちらもメモしておきます。
許可するURLとして、
- http://localhost:3000/
- https://localhost:3000/
応答URLとして、
- http://localhost:3000/authresponse
- https://localhost:3000/authresponse
を指定しておきます。実際に使われるのはhttpsのほうでした。
セキュリティプロファイルIDや、クライアントID、シークレットは、いつでも開発者ポータルで参照することが可能です。
これで必要な情報が揃いました。次にサンプルアプリケーションの準備と設定を行います。
alexa-sample-appのセットアップ
Raspberry Pi上で、githubからサンプルアプリケーションのソースコードをcloneします。使用するリポジトリは、alexa-avs-sample-appの本家です。
$ git clone https://github.com/alexa/alexa-avs-sample-app.git
インストールスクリプトの先頭部分に、製品ID(ProductID)、クライアントID(ClientID)、クライアントシークレット(ClientSecret)を設定する箇所がありますので、さきほど開発ポータルで設定、取得した値に書き換えます。
$ cd ~/alexa-avs-sample-app $ vi automated_install.sh ...snip... # This is the name given to your device or mobile app in the Amazon developer portal. To look this up, navigate to https://developer.amazon.com/edw/home.html. It may be labeled Device Type ID. ProductID=AIYVoiceKit # Retrieve your client ID from the web settings tab within the developer console: https://developer.amazon.com/edw/home.html ClientID=amzn1.application-oa2-client.c1dXXXXXXXXXXXXXXXXXXXXXXXX66f # Retrieve your client secret from the web settings tab within the developer console: https://developer.amazon.com/edw/home.html ClientSecret=d84XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX782
書き換えを行ったら、インストールスクリプトを走らせます。いくつか質問項目がありますがデフォルトのままでOKです。途中の質問でロケールを聞かれますので、"ja_JP"を選ぶことで日本語にできます。
完了までしばらく時間がかかりますので、しばし待ちましょう。
$ . automated_install.sh ...snip... ***************************** ========= Finished ========== ***************************** ============================= To run the demo, do the following in 3 seperate terminals: Run the companion service: cd /home/pi/alexa-avs-sample-app/samples/companionService && npm start Run the AVS Java Client: cd /home/pi/alexa-avs-sample-app/samples/javaclient && mvn exec:exec Run the wake word agent: Sensory: cd /home/pi/alexa-avs-sample-app/samples/wakeWordAgent/src && ./wakeWordAgent -e sensory KITT_AI: cd /home/pi/alexa-avs-sample-app/samples/wakeWordAgent/src && ./wakeWordAgent -e kitt_ai GPIO: PLEASE NOTE -- If using this option, run the wake word agent as sudo: cd /home/pi/alexa-avs-sample-app/samples/wakeWordAgent/src && sudo ./wakeWordAgent -e gpio
インストールログの最後に、アプリケーションの起動方法が表示されています。
サンプルアプリケーションを起動する
サンプルを動作させてみます。いくつかのプロセスを手動で動作させる必要があります。それぞれのプロセス用にターミナルを個別に開いて起動します。
まずは認証用サーバーです。ポート3000で待受をするプロセスです。
$ cd ~/alexa-avs-sample-app/samples/companionService && npm start
$ cd ~/alexa-avs-sample-app/samples/javaclient && mvn exec:exec
$ cd ~/alexa-avs-sample-app/samples/wakeWordAgent/src && ./wakeWordAgent -e sensory
動かしてみる
"アレクサ"とウェイクワードを発すると、ピボッっと音がして反応します。なにか話しかけてみましょう。
「アレクサ!、おはよう」と話しかけてみた動画です。季節の話題として、夏目漱石の飼い猫の墓の話をしゃべりだし出しました。
自動起動スクリプトを準備する
電源を入れたらすぐにAVSが動作してほしいですよね。そこで自動起動スクリプトを用意してみました。
$ vi start-avs.sh #!/bin/sh AVS_SAMPLES=/home/pi/alexa-avs-sample-app/samples (cd $AVS_SAMPLES/companionService && npm start) & pid1=$! (sleep 10; cd $AVS_SAMPLES/wakeWordAgent/src && ./wakeWordAgent -e sensory) & pid2=$! cd $AVS_SAMPLES/javaclient && mvn exec:exec kill $pid1 kill $pid2
こんなスクリプトを用意して、GUIが起動したときに自動実行されるよう、~/.config/lxsession/LXDE-pi/autostart
に追記します。
$ vi ~/.config/lxsession/LXDE-pi/autostart @/home/pi/start-avs.sh
これを仕込むことで、自動的にAVSが起動するようになります。
最後に
Google AIY Voice Kitで、Alexaのサンプルを動作させることができました。スピーカやマイクも付いており、とても納まりが良く、AVSのプロトタイプを作成することができます。Googleさん、ごめんなさい。
このレポートは以上です。